#include "event_queue.h"

// 静态队列结构
static struct
{
    Event events[EVENT_QUEUE_SIZE];
    volatile uint8_t head;
    volatile uint8_t tail;
} queue;

void event_queue_init(void)
{
    queue.head = 0;
    queue.tail = 0;
}

// 中断中使用此函数写入事件
bool event_queue_push_isr(EventType type)
{
    uint8_t next = (queue.head + 1) % EVENT_QUEUE_SIZE;
    if (next == queue.tail)
    {
        // 队列满，无法写入
        return false;
    }

    queue.events[queue.head].type = type;
    queue.head = next;
    return true;
}

bool event_queue_pop(Event *evt)
{
    if (queue.head == queue.tail)
    {
        // 队列为空
        return false;
    }

    *evt = queue.events[queue.tail];
    queue.tail = (queue.tail + 1) % EVENT_QUEUE_SIZE;
    return true;
}

bool event_queue_is_empty(void)
{
    return queue.head == queue.tail;
}
